package common.impl;

import java.math.BigDecimal;


public class MoneyFix {
	//固定2位小数
	public static double fixMoney(Double money){
		return (double)Math.round(money * 100)/100;
	}
	/*
	 * 转换成金额大写
	 * @param money: 要转化的金额
	 * @return 转化后的金额或 ""
	 */
	public static String toComplicatedChinese(Double money){
		//最大为亿
		if(money >= 1000000000)
			return "";
		BigDecimal big = new BigDecimal(money.toString());
		big = big.setScale(2, BigDecimal.ROUND_HALF_UP);
		String s = cleanZero(splitNum(big.toString()));  
		return s;
	}
	
	 /** 
	   * 把用户输入的数以小数点为界分割开来，并调用 numFormat() 方法 
	   * @param s String 
	   * @return 转换好的中文金额大写形式的字符串 
	   */  
	private static String splitNum(String s) {  
		if("".equals(s))  
			return "";  
		
	    int index = s.indexOf(".");  
	    String intOnly = s.substring(0, index);  
	    
	    String part1 = numFormat(1, intOnly);  
	    String smallOnly = s.substring(index + 1);  
	    String part2 = numFormat(2, smallOnly);  
	    String newS = part1 + part2;  
	    
	    return newS;  
	}  
	/**
	 * 转换整数和小数部分大小写
	 * @param flag:整数 1 小数 2
	 * @param s:待转换的串
	 * @return 转换后的串 
	 */
	private static String numFormat(int flag, String s) {  
        int sLength = s.length();  
        String bigLetter[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};  
        String unit[] = {"元", "拾", "佰", "仟", "万",   
                "拾", "佰", "仟",  
                "亿", "拾", "佰", "仟", "万"};  
        String small[] = {"分", "角"};  
        String newS = "";  
        for(int i = 0; i < sLength; i ++) {  
            if(flag == 1) {  
                newS = newS + bigLetter[s.charAt(i) - 48] + unit[sLength - i - 1];  
            } else if(flag == 2) {  
                newS = newS + bigLetter[s.charAt(i) - 48] + small[sLength - i - 1];  
            }  
        }  
        return newS;  
	}
   /** 
    * 清理符串里面多余的零 
    * @param s String 已经转换好的字符串 
    * @return 改进后的字符串 
    */  
	private static String cleanZero(String s) {  
        // 如果传入的是空串则继续返回空串  
        if("".equals(s)) {  
            return "";  
        }  
        while(s.charAt(0) == '零') {  
            s = s.substring(2);  
            if(s.length() == 0) {  
                return "零";  
            }  
        }  
        String regex1[] = {"零仟", "零佰", "零拾"};  
        String regex2[] = {"零亿", "零万", "零元"};  
        String regex3[] = {"亿", "万", "元"};  
        String regex4[] = {"零角", "零分"};  
        // 第一轮转换把 "零仟", 零佰","零拾"等字符串替换成一个"零"  
        for(int i = 0; i < 3; i ++) {  
            s = s.replaceAll(regex1[i], "零");  
        }  
        // 第二轮转换考虑 "零亿","零万","零元"等情况  
        // "亿","万","元"这些单位有些情况是不能省的，需要保留下来  
        s = s.replaceAll("零+", "零");  

        for(int i = 0; i < 3; i ++) {  
            s = s.replaceAll(regex2[i], regex3[i]);  
        }  
        // 第三轮转换把"零角","零分"字符串省略  
        for(int i = 0; i < 2; i ++) {  
            s = s.replaceAll(regex4[i], "");  
        }  
        // 当"万"到"亿"之间全部是"零"的时候，忽略"亿万"单位，只保留一个"亿"  
        s = s.replaceAll("亿万", "亿");  
        if(s.indexOf('角')== -1 && s.indexOf('分') == -1)
        	s += "整";
        return s;  
    }  
}
